package com.qf.web_last.Config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;

@Configuration
public class GlobalCorsConfig {

    // 核心跨域配置
    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        // 1. 允许的前端域名（必须精确匹配，不能用*）
        corsConfiguration.addAllowedOrigin("http://localhost:8080");
        // 2. 允许携带Cookie（前后端登录态传递必须开启）
        corsConfiguration.setAllowCredentials(true);
        // 3. 允许的请求方法（必须包含OPTIONS预检请求）
        corsConfiguration.addAllowedMethod("*"); // 允许所有方法（简化写法）
        // 4. 允许的请求头
        corsConfiguration.addAllowedHeader("*");
        // 5. 暴露的响应头
        corsConfiguration.addExposedHeader("Authorization");
        // 6. 预检请求有效期（3600秒=1小时）
        corsConfiguration.setMaxAge(3600L);
        return corsConfiguration;
    }

    // 创建CorsFilter
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 对所有接口生效
        source.registerCorsConfiguration("/**", buildConfig());
        return new CorsFilter(source);
    }

    // 关键：强制注册过滤器，设置最高优先级
    @Bean
    public FilterRegistrationBean<CorsFilter> corsFilterRegistration() {
        FilterRegistrationBean<CorsFilter> registration = new FilterRegistrationBean<>(corsFilter());
        registration.setOrder(Ordered.HIGHEST_PRECEDENCE); // 最高优先级，确保先于所有拦截器执行
        registration.addUrlPatterns("/*"); // 所有请求都经过此过滤器
        return registration;
    }
}